为HTTP流量设置授权策略
当您需要精细控制服务间的HTTP流量访问时,可以为HTTP流量设置授权策略,管理服务之间的交互权限,确保只有经过授权的请求才能访问特定服务,提高服务的安全性和可靠性。
前提条件
已定义Istio资源。具体操作,请参见使用Istio资源实现版本流量路由。
步骤一:配置空白授权策略
本文以配置一个基础的拒绝策略,拒绝对工作负载的所有请求为例,逐步授予对工作负载的其他访问权限。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 ,然后单击使用YAML创建。
在创建页面,选择命名空间为default,选择任意场景模版,将以下YAML模板粘贴到YAML区域,然后单击创建。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {}
创建完成后,在授权策略页面,可以看到allow-nothing授权策略。
在浏览器地址栏,输入
http://{您的ASM网关地址}/productpage
,访问Bookinfo应用。您可以看到页面返回
RBAC: access denied
,表示没有权限访问。关于如何获取网关IP,请参见获取入口网关地址。
步骤二:配置Productpage服务的授权策略
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
任选以下方式,创建可以访问Productpage自身服务的授权策略。
方式一:使用YAML创建授权策略
在授权策略页面,单击使用YAML创建。
在创建页面,选择命名空间为default,选择任意场景模版,将以下YAML模板粘贴到YAML区域,单击创建。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"]
方式二:通过图形化界面创建授权策略
在授权策略页面,单击创建。
在创建页面,配置如下信息,单击创建。
配置项
说明
名称
设置为productpage-viewer。
策略类型
选择允许。
命名空间
在工作负载生效页签,设置命名空间为default。
生效范围
选择Service。
工作负载
选择productpage。
请求匹配规则
在添加请求目标区域,打开HTTP方法(Methods)开关,设置值为GET。
创建完成后,在授权策略页面,可以看到productpage-viewer授权策略。
在浏览器地址栏,输入
http://{您的ASM网关地址}/productpage
,访问Bookinfo应用。如下图所示,由于上一步设置了允许GET请求访问,所以能够正常访问Productpage页面,但无法访问Details和Reviews服务。
步骤三:配置Details服务的授权策略
通过配置Details服务的授权策略,允许接收来自Productpage的serviceAccount
发出的请求。
获取Productpage的
serviceAccount
参数值。登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在无状态页面的操作列,单击productpage-v1对应的
,获取serviceAccount
参数值。如下图所示,
serviceAccount
参数值为bookinfo-productpage
。
创建授权策略。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
任选以下方式创建授权策略。
方式一:通过YAML创建授权策略
在授权策略页面,单击使用YAML创建。
在创建页面,选择命名空间为default,选择任意场景模版,将如下YAML模板粘贴到YAML区域,单击创建。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: details-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage # bookinfo-productpage为serviceAccount的参数值,由上一步获取。 selector: matchLabels: app: details
方式二:通过图形化界面创建授权策略
在授权策略页面,单击创建。
在创建页面,配置如下信息,单击创建。
配置项
说明
名称
设置为details-viewer。
策略类型
选择允许。
命名空间
在工作负载生效页签,设置命名空间为default。
生效范围
选择Service。
工作负载
选择details。
请求匹配规则
在添加请求来源区域,打开请求身份(Principals)开关,设置值为cluster.local/ns/default/sa/bookinfo-productpage。
说明bookinfo-productpage
为serviceAccount
的参数值,由步骤1获取。在添加请求目标区域,打开HTTP方法(Methods)开关,设置值为GET。
创建完成后,在授权策略页面,可以看到details-viewer授权策略。
在浏览器地址栏,输入
http://{您的ASM网关地址}/productpage
,访问Bookinfo应用。如下图所示,可以正常访问左侧的Details服务,但无法访问右侧的Reviews服务。
步骤四:配置Reviews服务的授权策略
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
任选以下方式创建授权策略。
方式一:使用YAML创建授权策略
在授权策略页面,单击使用YAML创建。
在创建页面,选择命名空间为default,选择任意场景模版,将以下YAML模板粘贴到YAML区域,单击创建。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: reviews-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage selector: matchLabels: app: reviews
方式二:使用图形化界面创建授权策略。
在授权策略页面,单击创建。
在创建页面,配置如下信息,单击创建。
配置项
说明
名称
设置为reviews-viewer。
策略类型
选择允许。
命名空间
在工作负载生效页签,设置命名空间为default。
生效范围
选择Service。
工作负载
选择reviews。
请求匹配规则
在添加请求来源区域,打开请求身份(Principals)开关,设置值为cluster.local/ns/default/sa/bookinfo-productpage。
说明bookinfo-productpage
为serviceAccount
的参数值,由步骤1获取。在添加请求目标区域,打开HTTP方法(Methods)开关,设置值为GET。
创建完成后,在授权策略页面,可以看到reviews-viewer授权策略。
在浏览器地址栏,输入
http://{您的ASM网关地址}/productpage
,访问Bookinfo应用。如下图所示,左侧的Details服务和右侧的Reviews服务均可正常访问。
相关文档
对授权策略配置失误可能会引起非预期的访问被拒绝或放行,您可以使用ASM授权策略试运行模式,通过日志判断对应策略的执行结果是否符合预期,确认无误后关闭试运行模式,使授权策略真正生效。具体操作,请参见使用ASM授权策略试运行模式。
如果您需要精细控制服务间的TCP流量访问,请参见为TCP流量设置授权策略。
如果您需要对网格外服务进行授权控制,请参见对网格内服务访问外部网站进行授权控制和对网格内服务访问外部数据库进行授权控制。
您可以自定义ASM网关访问日志的内容,及时发现潜在的安全问题。具体操作,请参见生成和采集ASM网关访问日志。
您可以启用网格审计功能,记录或追溯不同用户的日常操作,也可以为网格资源操作配置审计告警,在重要资源变动时及时发出告警通知到告警联系人。具体操作,请参见使用KubeAPI操作审计和为网格资源操作配置审计告警。